Welcome to pandas!

4.7 查找位置与数据的查找判断

1、查找位置

s.str.find(sub,start=0,end=none)

s.str.index(sub,start=0,end=none)

sub :正在查找的子字符串

start :查找的起始位置

end :查找的结果位置


import pandas as pd

s=pd.Series([ "张三48李四97","王麻子32王五96","韩四99lily97" ])

t=s.str.find( "9" , start = 5 )


print (t)

返回:

0 6
1 7
2 8

dtype: int64


2、数据的查找判断

如果需要判断Series数据中是否有指定的字符,条件成立返回True,否则返回False,

(1)判断是否包含指定字符串用contains()函数,区分大小写,支持正则表达式,结构如下

pat :字符串或正则表达式

case :如果为True,则区分大小写,如果为False,则不区分

flags :re模块中的标志

na :缺失值的处理

regex :是否将pat参数视为正则表达式,True视为正则表达式,False视为普通字符。


import pandas as pd

s=pd.Series([ "123abc","123ABC","Abd1253" ])

t1=s.str.contains( "123" , True )

t2=s.str.contains( "abc" , case = False )

print (t1)

print (t2)

返回:

0 True
1 True
2 False

dtype: bool

0 True
1 True
2 False

dtype: bool


(2)用match()函数从头开始查找,区分大小写,支持正则表达式,结构如下

Pat :字符串或正则表达式

Case :如果为True,则区分大小写,如果为False,则不区分

flags :re模块中的标志

Na :缺失值的处理


import pandas as pd

s=pd.Series([ "123abc","123ABC","Abd1253" ,pd.NA])

t1=s.str.match( "123" , True )

t2=s.str.match( "\D+" ) # 可以用正则表达式

print (t1)

print (t2)

返回:

0 True
1 True
2 False
3 <NA>

dtype: object


0 False
1 False
2 True
3 <NA>

dtype: object


3、数据的查找应用

s.str.findall()函数:针对Series中的字符串做匹配,

re.findall()函数:对单独的字符串作匹配

函数 作用 是否支持正则
s.str.find 查找位置
s.str.index 查找位置
s.str.contains 查找判断
s.str.match 查找判断
s.str.findall 查找判断

import pandas as pd

test= "abc123de4fgdkl98ss"

s=pd.Series([ "123abc","123ABC","Abd1253" ,pd.NA])

t1=re.findall( "\d+" ,test)

t2=s.str.findall( "^\d+" ) # 可以用正则表达式

print (t1)

print (t2)

返回:

['123', '4', '98']

0 [123]
1 [123]
2 []
3 <NA>

dtype: object


4、数据的查找应用实例

#统计每月成绩含有大于100的科目,如有,则达标

import pandas as pd,numpy as np

df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\测试素材.查找实例应用.xlsx" )

print (df)

df[ "是否达标" ]=df.iloc[:, 1 :].apply( lambda s:np.where (np.all(s.str.contains( "\d{3,}" )), "YES","NO" ), axis = 1 )

df1=df.iloc[:, 1 :].apply( lambda s:np.where (s.str.contains( "\d{3,}" ), "YES","NO" ), axis = 1 )

print (df)

print (df1)

# np.all判断整行Series

姓名 1月 2月 3月
0 张三 语89数120 语98数103 语105数86
1 李四 语67数87 语89数97 语88数93
2 王二 语78数126 语84数113 语86数136
3 麻子 语68数89 语123数128 语88数96

姓名 1月 2月 3月 是否达标
0 张三 语89数120 语98数103 语105数86 YES
1 李四 语67数87 语89数97 语88数93 NO
2 王二 语78数126 语84数113 语86数136 YES
3 麻子 语68数89 语123数128 语88数96 NO

0 [YES, YES, YES, YES]
1 [NO, NO, NO, YES]
2 [YES, YES, YES, YES]
3 [NO, YES, NO, YES]

dtype: object